// DataLibrary InterfacePlugin - Group

// 識別子：DL_GRP
// 内容  ：グループ。

//----------------------------------------------------------------------------//
// Plugin
//----------------------------------------------------------------------------//

//-- プラグインの読み込み処理 --//
DL_LoadInterface_Group:
	// 共有サブルーチンを読み込む
	Call DL_LoadInterface "Common"
	
	// サブインターフェースを読み込む
	Call DL_LoadInterface "Config"
	Call DL_LoadInterface "Help"
	
	// スキンを読み込む
	Call DL_LoadSkin "Group"
Return


//-- プラグインの終了処理 --//
//DL_UnLoadInterface_Group:
//Return


//----------------------------------------------------------------------------//
// LibraryFile
//----------------------------------------------------------------------------//

//-- LoadLibraryFile_Group handle lib_id : ライブラリファイルを読み込む --//
DL_LoadLibraryFile_Group:
	Local F = Args(1)
	Local lib_id = Args(2)
	
	// グループの多重使用を禁止する
	If lib_id Like "*_*" Then
		Call DL_ErrorMes "Interface-Groupをグループ化することはできません。"
		UnSet DL_LibInfo[lib_id]
		UnSet DL_LibCount[lib_id]
		UnSet DL_LibUnreadCount[lib_id]
		Return
	EndIf
	
	// アーカイブファイルとして読み込む
	If IsVarDefined(DL_ArchiveID[lib_id]) Then
		Call ("DL_LoadGroupArchive_" & DL_ArchiveID[lib_id]) lib_id
		Return
	EndIf
	
	// 通常のライブラリファイルとして読み込む
	Local read_data section key value icon
	Do While (EOF(F) = 0)
		read_data = DL_LineRead(F)
		
		If read_data = "" Then
			Skip  // 空行(コメント行も含む)はスキップする
		ElseIf DL_IsSectionLine(read_data) Then
			section = LCase(Mid(read_data, 2, Len(read_data) - 2))  // セクションを取り出す
			Skip
		EndIf
		
		// キーと値に分割する
		If read_data Like "*=*" Then
			key = RegExpReplace(read_data, "^\s*(.*?)\s*=.*", "$1")
			value = RegExpReplace(read_data, ".*=\s*(.*?)\s*$", "$1")
		ElseIf section = "datalist" Then
			key = read_data
			value = ""
		Else
			Skip
		EndIf
		
		// データを設定する
		Switch section
		Case "datalist"
			// グループリストを設定する
			value = DL_ConvertListData(value, ",")
			Call DL_RegisterGroupItem lib_id key LIndex(value, 1) LIndex(value, 2)
		Case "group"
			// 旧Verのデータを設定する
			Switch LCase(key)
			Case "library"
				Call DL_RegisterGroupItem lib_id value "" ""
			Case "title"
				Call DL_UpdateLibraryItem lib_id DL_LibCount[lib_id] _
					("(" & value & ") (" & DL_GetLibItemData(lib_id, DL_LibCount[lib_id], 2) & ")")
			Case "icon"
				Call DL_UpdateLibraryItem lib_id DL_LibCount[lib_id] _
					("(" & DL_GetLibItemData(lib_id, DL_LibCount[lib_id], 1) & ") (" & value & ")")
			EndSw
		EndSw
	Loop
Return


//-- RegisterGroupItem lib_id file title : グループ化したライブラリファイルを登録する --//
DL_RegisterGroupItem:
	Local lib_id = Args(1)
	Local file = Args(2)
	Local title = Args(3)
	Local icon = Args(4)
	Local group_id = lib_id & "_" & (DL_LibCount[lib_id] + 1)
	
	// ライブラリファイルを読み込む
	Call DL_LoadLibraryFile file group_id
	
	// タイトルとアイコンの指定を適用する
	If title = "" Then
		title = DL_GetLibTitle(group_id)
	EndIf
	If icon = "" Then
		icon = DL_GetLibIcon(group_id)
	EndIf
	Call DL_UpdateLibraryFile group_id - - title - icon
	
	// 未読状態を反映する
	Incr DL_LibCount[lib_id] 1
	Incr DL_LibUnreadCount[lib_id] DL_LibUnreadCount[group_id]
Return


//----------------------------------------------------------------------------//
// Interface-Group
//----------------------------------------------------------------------------//

//-- GUI_Group : インターフェースを開始する --//
DL_GUI_Group:
	// インターフェースを表示する
	Call DL_GRP_SkinAction "StartInterface"
	Show
	Do
		Call DL_CMN_WaitAction
	Loop While DL_GRP_InterfaceAction(DL_CMN_ActionID)
	
	// インターフェースを終了する
	Call DL_GRP_SkinAction "EndInterface"
Return


//-- InterfaceAction action_id : 動作を実行する。ループ続行なら1を返す --//
DL_GRP_InterfaceAction:
	Local action_id = Args(1)
	Switch LIndex(action_id, 1)
	Case "Library"
		Call DL_PlaySound_Click
		Call DL_GRP_SkinAction "SelectLibrary" action_id
		
		// 表示するライブラリのインターフェースを設定する
		Set DL_ShowLib (DL_ShowLib & "_" & LIndex(action_id, 2))
		Set DL_ShowID 0
		Set DL_ShowGUI "GroupInterface"
		Return 0
	Case "Scroll"
		// スクロール用の汎用処理を呼び出す
		Return DL_CMN_ScrollAction(action_id, "GRP")
	Case "Help" "Config"
		// サブインターフェース用の汎用処理を呼び出す
		Return DL_CMN_SubInterfaceAction(action_id, "GRP")
	Case "Return" "Cancel"
		// 戻る用の汎用処理を呼び出す
		Return DL_CMN_ReturnAction(action_id, "GRP", "Index")
	Case "Index"
		// 戻る用の汎用処理を呼び出す(インデックス直帰)
		Return DL_CMN_IndexAction(action_id, "GRP")
	Case "Quit"
		// 終了用の汎用処理呼び出す 
		Return DL_CMN_QuitAction(action_id, "GRP")
	Case Else
		// 未設定動作用の汎用処理を呼び出す
		Return DL_CMN_NotDefinedAction(action_id, "GRP")
	EndSw
Return 1


//-- GUI_GroupInterface : グループ用インターフェースを開始する --//
DL_GUI_GroupInterface:
	// 対象のインターフェースを設定する
	Set DL_ShowGUI DL_GetLibInterface(DL_ShowLib)
	
	// 対象のインターフェースが終了するまでループする
	Do
		Call ("DL_GUI_" & DL_ShowGUI)
	Loop While ((DL_ShowGUI != "") And (DL_ShowGUI != "Index"))
	
	// 表示ライブラリと表示IDを復元する
	Set DL_ShowID RegExpReplace(DL_ShowLib, ".*_(.*)", "$1")
	Set DL_ShowLib RegExpReplace(DL_ShowLib, "(.*)_.*", "$1")
	
	// 終了やインデックス直帰でない場合はグループに戻る
	If (DL_CMN_ActionID = "Reutrn") Or (DL_CMN_ActionID = "Cancel") Then
		Set DL_ShowGUI "Group"
	EndIf
Return


